
debounceTime,當事件觸發後,如果這一段時間都沒有任何事件進來,我就會選擇這筆資料。throttleTime的概念則是,當事件觸發後,這筆資料會馬上被選擇,而這段期間任何輸入的事件資料,都會被忽略。
圖片來源-RxJS Marbles-throttleTime
duration time = 25ms期間內的所有資料,都被丟棄。import { fromEvent, throttleTime, tap, map } from 'rxjs';
const keyup$ = fromEvent(document, 'keyup');
keyup$
  .pipe(
    map((event: KeyboardEvent) => event.code), // 取keycode
    tap((code) => console.log(code)), // 顯示使用者輸入的keycode
    throttleTime(2000) // throttleTime
  )
  .subscribe((code) => console.log('===>throttle:', code));


key值,你可以發現,throttleTime會將第一個事件的key值送出,過程中任何被觸發的值都會被丟棄。throttleTime相當適合拿來設計:throttleTime就能優化囉!先來看原始的設計,每次捲動一格,scroll事件就會被觸發一次!相當耗費效能。
利用
throttleTime來降低取樣頻率,讓效能提升!
當事件觸發後,等待一段時間沒有資料近來,
debounceTime才會將這筆資料往後傳遞。
因此,當使用者停下scroll動作,等待一段時間才會送出百分比。
throttleTime及debounceTime都相當適合拿來 減少高頻取樣 的設計。throttleTime: 當事件觸發後,這筆資料會馬上被選擇,而這段期間任何輸入的事件資料,都會被忽略。適合與動畫、拖曳或scroll結合。
debounceTime:當事件觸發後,如果這一段時間都沒有任何事件進來,我就會選擇這筆資料。適合拿來判斷使用者是否高頻率的輸入(keyup)或點擊(click)。
throttleTime有許多眉角需要釐清,相信是值得的~ 繼續fighting!!